package Leetcode;

import java.util.LinkedList;
import java.util.Stack;

public class decodeString {
    public String decodeString(String s) {
        StringBuilder res = new StringBuilder();
        int multi = 0;
        LinkedList<Integer> stack_multi = new LinkedList<>();
        LinkedList<String> stack_res = new LinkedList<>();
        for (char c : s.toCharArray()) {
            if (c == '['){
                stack_multi.addLast(multi);
                stack_res.addLast(res.toString());
                multi = 0;
                res = new StringBuilder();
            } else if (c == ']'){
                StringBuilder temp = new StringBuilder();
                int cur_multi = stack_multi.removeLast();
                temp.append(String.valueOf(res).repeat(Math.max(0, cur_multi)));
                res = new StringBuilder(stack_res.removeLast() + temp);
            } else if (c >= '0' && c <= '9'){
                multi = multi * 10 + Integer.parseInt(c + "");
            } else {
                res.append(c);
            }
        }
        return res.toString();
    }
}
